Generally, a compiler transforms a program code described in programming languages, such as, Formula Translator (Fortran), C, C++ (CPP), and the like, to an appropriate command to be executed in a processor. The operations of a compiler may be divided into a front-end, a machine-independent transformation, a machine-dependent transformation, and the like.
The front-end operation transforms a program code described with programming languages to an intermediate representation (IR), which may be easily processed in the compiler. The machine-dependent transformation is also referred to as a back-end operation, and may be easily affected by a configuration of a processor where the program code is executed.
Since a new algorithm may be used or algorithms updated every time a processor is developed or upgraded, a new compiler may be required to be developed or upgraded for the back-end operation.
Where a compiler is newly developed or upgraded, a compiler developer may need to verify the accuracy of the compiler. The verifying operation of the compiler is referred to as ‘debugging the compiler’. Since a code that is transformed during the back-end operation is a machine-friendly code, it may be difficult for a person having an ordinary skill in the art to verify the accuracy of a compiler by observing the compiling operations.
Also, a certification scheme based on a formal theory may be used for debugging a compiler. However, while the certification scheme may accurately verify the compiler in theory, which is based on a mathematic model, the certification scheme is difficult to implement due to its complexity.